﻿package Graficos 
{
	public class Punto3d 
	{
		public var x:Number;
		public var y:Number;
		public var z:Number;
		
		public function Punto3d (xx:Number, yy:Number, zz:Number)
		{
			x=xx;
			y=yy;
			z=zz;
		}
		
		public function sumar(xx:Number, yy:Number, zz:Number):Punto3d
		{
			return new Punto3d(xx+x,yy+y,zz+z);
		}
		
		public function restar(xx:Number, yy:Number, zz:Number):Punto3d
		{
			return new Punto3d(xx-x,yy-y,zz-z);
		}
		
		public function distanciaCuadrada():Number
		{
			return x*x+y*y+z*z;
		}
		
		public function multiplicacionEscalar(alfa:Number):Punto3d
		{
			return new Punto3d(alfa*x,alfa*y,alfa*z);
		}
		
		public function sumarPunto3d(otroPunto:Punto3d):Punto3d
		{
			return this.sumar(otroPunto.x,otroPunto.y,otroPunto.z);
		}
		
		public function restarPunto3d (otroPunto:Punto3d):Punto3d
		{
			return new Punto3d (x-otroPunto.x,y-otroPunto.y,z-otroPunto.z);
		}
		
		public function normalizar():Punto3d
		{
			var modulo:Number = Math.sqrt(this.distanciaCuadrada());
			return new Punto3d(x/modulo,y/modulo,z/modulo);
		}
		
		public function dot(otroPunto:Punto3d):Number
		{
			var ret:Number = x*otroPunto.x+y*otroPunto.y+z*otroPunto.z;
			return ret;
		}
	}
}